﻿using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;

namespace CRM.Database.Model
{
    public partial class TechnicRequests : IGetKeyValue
    {
        #region Implementation of ISetChangedUser

        #endregion

        #region Implementation of IGetKeyValue

        /// <summary>
        /// Получение ключего значения элемента
        /// </summary>
        /// <returns>Ключевое значение</returns>
        public int GetKeyValue()
        {
            return IdTechnicRequest;
        }

        #endregion

        #region Extended properties

        /// <summary>
        /// Отображение типов выездов
        /// </summary>
        public string VisitsTypesColumn
        {
            get
            {
                var visitsTypesCol = new VisitsTypesCollection();

                string result = " ";
                if (TechnicRequestsVisitsTypes == null) return result;
                foreach (TechnicRequestsVisitsTypes item in TechnicRequestsVisitsTypes)
                {
                    var visitType = (VisitsTypes) DB.Entities.VisitsTypes.Find(item.IdVisitsType);
                    if (visitType != null)
                    {
                        if (string.IsNullOrEmpty(result))
                        {
                            result += visitType.VisitsType;
                        }
                        else
                        {
                            result += Environment.NewLine + visitType.VisitsType;
                        }
                    }
                }
                return result;
            }
        }

        /// <summary>
        /// строка с типами выездов
        /// </summary>
        public string VisitsTypesString
        {
            get
            {
                var visitsTypesCol = new VisitsTypesCollection();
                string result = "";
                if (TechnicRequestsVisitsTypes == null) return result;
                foreach (TechnicRequestsVisitsTypes item in TechnicRequestsVisitsTypes)
                {
                    var visitType = (VisitsTypes) visitsTypesCol.GetItemById(item.IdVisitsType);
                    if (visitType != null)
                    {
                        if (string.IsNullOrEmpty(result))
                        {
                            result += visitType.VisitsType;
                        }
                        else
                        {
                            result += ";" + visitType.VisitsType;
                        }
                    }
                }
                return result;
            }
        }

        /// <summary>
        /// имя менеджера 
        /// </summary>
        public string ManagerName
        {
            get
            {
                //if (Customers != null)
                //    if (Customers.Manager != null)
                //        return Customers.Manager;
                //return " ";
                if(IdCustomer>=0)
                {
                    Customers cust = DB.Entities.Customers.Find(IdCustomer);
                    if(cust!=null)
                        return cust.Manager;
                    
                }
                return "";
            }
        }

        /// <summary>
        /// Название ЮР лица
        /// </summary>
        public string LegalEntityName
        {
            get
            {
                //if (LegalEntities != null)
                //    if (LegalEntities.Name != null)
                //        return LegalEntities.Name;
                if(IdLegalEntity>0)
                {
                    var le = DB.Entities.LegalEntities.Find(IdLegalEntity);
                    if(le!=null)
                    {
                        return le.Name;
                    }
                }

                return " ";
            }
        }


        public string TechnicRequestStatusName
        {
            get
            {
                if(IdTechnicRequestStatus>0)
                {
                    var status = DB.Entities.TechnicRequestStatuses.Find(IdTechnicRequestStatus);
                    if(status!=null)
                    {
                        return status.GetLocalizedName();
                    }
                }
                
                
                return " ";
            }
        }

        /// <summary>
        /// Имя назначенного техника
        /// </summary>
        public string TechnicName
        {
            get
            {
                if (IdTechnic > 0)
                {
                    //var col = new UsersCollection();
                    Users user = DB.Entities.Users.Find(IdTechnic);
                    if (user != null)
                    {
                        return user.LocalizedFullName;
                    }
                }
                return "";
            }
        }

        /// <summary>
        /// Город
        /// </summary>
        public string City
        {
            get
            {
                if(IdAddress>0)
                {
                    var addr = DB.Entities.Addresses.Find(IdAddress);
                    if (addr != null)
                        return addr.SettlementsLocalized;
                }
                return "";
                
                return Addresses != null ? Addresses.SettlementsLocalized : " ";
            }
        }

        /// <summary>
        /// Получить строку адреса из заявки на выезд
        /// </summary>
        /// <returns></returns>
        public string LocalizedAddressString
        {
            get
            {
                string result = "";
                if (Addresses == null) return result;

                result += Addresses.RegionNameLocalized + " ";
                result += Addresses.DistrictNameLocalized + " ";
                result += Addresses.AreasNameLocalized + " ";
                result += Addresses.SettlementsLocalized + " ";

                if (!string.IsNullOrEmpty(Addresses.Street))
                    result += Addresses.Street;
                //result += Resourses.Resourses.customerStreet + ": " + requests.Addresses.Street;

                if (!string.IsNullOrEmpty(Addresses.House))
                    result += Addresses.House;
                //result += Resourses.Resourses.customerHouse + ": " + requests.Addresses.House;

                if (!string.IsNullOrEmpty(Addresses.Phone))
                    result += Addresses.Phone;
                //result += Resourses.Resourses.customerPhone + ": " + requests.Addresses.Phone;

                return result;
            }
        }

        /// <summary>
        /// Формирование DataTable для таблицы оборудования в отчете
        /// </summary>
        /// <returns></returns>
        public DataTable EquipmentReportTable
        {
            get
            {
                var equipmentsCol = new EquipmentsCollection();
                List<TechnicRequestsEquipments> equipmentBindingList =
                    equipmentsCol.GetBindingsEquipmentsListByRequestId(IdTechnicRequest);
                if (equipmentBindingList.Count < 1) return null;

                var resultTable = new DataTable();
                resultTable.Columns.Add("EquipmentTypeNameRu", typeof (string));
                resultTable.Columns.Add("EquipmentTypeNameEn", typeof (string));
                resultTable.Columns.Add("EquipmentCount", typeof (string));
                resultTable.Columns.Add("VendorNameExt", typeof (string));
                resultTable.Columns.Add("ModelExt", typeof (string));
                resultTable.Columns.Add("IssueDate", typeof (string));

                foreach (TechnicRequestsEquipments item in equipmentBindingList.OrderBy(p => p.EquipmentTypeNameRu))
                {
                    DataRow row = resultTable.NewRow();
                    row["EquipmentTypeNameRu"] = item.EquipmentTypeNameRu;
                    row["EquipmentTypeNameEn"] = item.EquipmentTypeNameEn;
                    row["EquipmentCount"] = item.EquipmentCount.ToString();
                    row["VendorNameExt"] = item.VendorNameExt;
                    row["ModelExt"] = item.ModelExt;
                    row["IssueDate"] = item.IssueDate.Date.ToShortDateString();
                    resultTable.Rows.Add(row);
                }
                return resultTable;
            }
        }

        /// <summary>
        /// Регион профайн
        /// </summary>
        public string ProfineRegionNameLocalized
        {
            get
            {
                //if (Customers == null) return "";
                //return Customers.ProfineRegionNameLocalized;
                if(IdCustomer>0)
                {
                    var cust = DB.Entities.Customers.Find(IdCustomer);
                    if(cust!=null)
                    {
                        return cust.ProfineRegionNameLocalized;
                    }
                }
                return "";
            }
        }

        /// <summary>
        /// Название клиента
        /// </summary>
        public string CustomerName
        {
            get
            {
                if (LegalEntities != null)
                    if (LegalEntities.CustomerName != null)
                        return LegalEntities.CustomerName;
                return "";
            }
        }

        /// <summary>
        /// классификация по обороту
        /// </summary>
        public string CustomerClassificationByTurnover
        {
            get
            {
                //if (Customers != null)
                //    if (Customers.CustomerClassificationsTurnoverName != null)
                //        return Customers.CustomerClassificationsTurnoverName;

                if(IdCustomer>0)
                {
                    var cust = DB.Entities.Customers.Find(IdCustomer);
                    if (cust != null)
                        return cust.CustomerClassificationsTurnoverName;
                }

                return "";
            }
        }

        /// <summary>
        /// Дата выезда
        /// </summary>
        public string PlannedDateColumn
        {
            get
            {
                if (PlannedDate != null)
                    return PlannedDate.Value.ToShortDateString();
                return "";
            }
        }

        /// <summary>
        /// Контактный телефон Юр. лица
        /// </summary>
        public string ContactPhone
        {
            get
            {
                if (Contacts != null)
                    if (Contacts.Phone != null)
                        return Contacts.Phone;
                return " ";
            }
        }

        #endregion

        #region Extended methods

        /// <summary>
        /// заполняет нулевые значения пробелами
        /// </summary>
        public void Fill()
        {
            if (string.IsNullOrEmpty(Comments))
                Comments = " ";
        }

        /// <summary>
        /// возвращает объект вложения по имени или null
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public TechnicRequestAttachments GetAttachmentByName(string name)
        {
            return TechnicRequestAttachments == null
                       ? null
                       : TechnicRequestAttachments.FirstOrDefault(item => item.Name == name);
        }

        /// <summary>
        /// возвращает заполненный отчет в виде вложения или null
        /// </summary>
        /// <returns></returns>
        public TechnicRequestAttachments GetCompletedReportAttachment()
        {
            var confCol = new ConfigurationsCollection();
            if (TechnicRequestAttachments == null) return null;

            foreach (TechnicRequestAttachments item in TechnicRequestAttachments)
            {
                if (
                    item.Path.Contains(confCol.TechnicDocsPath + "\\Reports\\" + IdTechnicRequest +
                                       "CompletedReport.docx"))
                    return item;
            }

            return null;
        }

        /// <summary>
        /// Анализ вложенного DOC файла и запись результатов в БД
        /// </summary>
        /// <param name="attachment"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool AnalizeReport(TechnicRequestAttachments attachment, string user)
        {
            if (attachment == null) return false;


            return false;
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport1 GetReport1()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport1Collection();
            //проверить существует ли объект
            TechnicReport1 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport1();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport2 GetReport2()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport2Collection();
            //проверить существует ли объект
            TechnicReport2 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport2();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport3 GetReport3()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport3Collection();
            //проверить существует ли объект
            TechnicReport3 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport3();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport4 GetReport4()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport4Collection();
            //проверить существует ли объект
            TechnicReport4 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport4();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport5 GetReport5()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport5Collection();
            //проверить существует ли объект
            TechnicReport5 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport5();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport6 GetReport6()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport6Collection();
            //проверить существует ли объект
            TechnicReport6 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport6();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport7 GetReport7()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport7Collection();
            //проверить существует ли объект
            TechnicReport7 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport7();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport8 GetReport8()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport8Collection();
            //проверить существует ли объект
            TechnicReport8 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport8();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport9 GetReport9()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport9Collection();
            //проверить существует ли объект
            TechnicReport9 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport9();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport10 GetReport10()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport10Collection();
            //проверить существует ли объект
            TechnicReport10 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport10();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport11 GetReport11()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport11Collection();
            //проверить существует ли объект
            TechnicReport11 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport11();
        }

        /// <summary>
        /// получить отчет по таблице
        /// </summary>
        /// <returns></returns>
        public TechnicReport12 GetReport12()
        {
            //получить коллекцию объектов
            var collection = new TechnicReport12Collection();
            //проверить существует ли объект
            TechnicReport12 result = collection.GetItemByRequestId(IdTechnicRequest);
            if (result != null) return result;
            return new TechnicReport12();
        }


        /// <summary>
        /// Добавление к существующей заявке списка с типами выездов
        /// </summary>
        /// <param name="visitsTypesList"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool AddVisitsTypes(List<VisitsTypes> visitsTypesList, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;
            if (visitsTypesList.Count < 1) return true;
            var bindingsCol = new TechnicRequestsVisitsTypesCollection();
            foreach (VisitsTypes item in visitsTypesList)
            {
                var bindingItem = new TechnicRequestsVisitsTypes
                                      {
                                          IdTechnicRequest = IdTechnicRequest,
                                          IdVisitsType = item.IdVisitsType
                                      };
                if (!bindingsCol.Add(bindingItem, user)) return false;
            }
            return true;
        }

        /// <summary>
        /// Обновление типов выездов к заявке
        /// </summary>
        /// <param name="newList"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool UpdateVisitsTypes(List<VisitsTypes> newList, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;

            var visitsTypesCol = new VisitsTypesCollection();

            List<VisitsTypes> oldList = visitsTypesCol.GetVisitsTypesListByRequestId(IdTechnicRequest);
            if (oldList.Count == 0) return AddVisitsTypes(newList, user);

            //формирование списка на удаление
            var delList = new List<VisitsTypes>();
            foreach (VisitsTypes oldItem in oldList)
                if (!newList.Contains(oldItem)) delList.Add(oldItem);

            //удаление типов выездов
            if (!DeleteVisitsTypes(delList)) return false;

            //формирование списка на добавление 
            var addList = new List<VisitsTypes>();
            foreach (VisitsTypes addItem in newList)
                if (!oldList.Contains(addItem)) addList.Add(addItem);

            //добавление новых элементов
            return AddVisitsTypes(addList, user);
        }

        /// <summary>
        /// Удаление списка привязок типов выездов к заявкам
        /// </summary>
        /// <param name="visitsTypesList"></param>
        /// <returns></returns>
        public bool DeleteVisitsTypes(List<VisitsTypes> visitsTypesList)
        {
            if (visitsTypesList.Count < 1) return true;
            var bindingsCol = new TechnicRequestsVisitsTypesCollection();
            foreach (VisitsTypes item in visitsTypesList)
            {
                if (item.IdVisitsType == 0) continue;
                TechnicRequestsVisitsTypes bindingItem = bindingsCol.GetTechnicRequestsVisitsTypebyId(IdTechnicRequest,
                                                                                                      item.IdVisitsType);
                if (bindingItem == null) continue;
                bindingsCol.Delete(bindingItem);
            }
            return true;
        }


        /// <summary>
        /// Добавление списка систем к заявке
        /// </summary>
        /// <param name="productSystemsList"></param>
        /// <param name="user"></param>
        public bool AddProductSystems(List<ProductSystems> productSystemsList, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;
            if (productSystemsList.Count < 1) return true;
            var bindingsCol = new TechnicRequestsProductSystemsCollection();
            foreach (ProductSystems item in productSystemsList)
            {
                var bindingItem = new TechnicRequestsProductSystems
                                      {
                                          IdProductSystem = item.IdProductSystem,
                                          IdTechnicRequest = IdTechnicRequest
                                      };
                if (!bindingsCol.Add(bindingItem, user)) return false;
            }
            return true;
        }

        /// <summary>
        /// удаление списка привязок систем к заявкам из базы
        /// </summary>
        /// <param name="delList"></param>
        /// <returns></returns>
        public bool DeleteProductSystems(List<ProductSystems> delList)
        {
            if (delList.Count < 1) return true;
            var bindingsCol = new TechnicRequestsProductSystemsCollection();
            foreach (ProductSystems item in delList)
            {
                if (item.IdProductSystem == 0) continue;
                TechnicRequestsProductSystems bindingItem =
                    bindingsCol.GetTechnicRequestsProductSystemById(IdTechnicRequest, item.IdProductSystem);
                if (bindingItem == null) continue;
                bindingsCol.Delete(bindingItem);
            }
            return true;
        }

        /// <summary>
        /// Обновление списка систем
        /// </summary>
        /// <param name="newList"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool UpdateProductSystems(List<ProductSystems> newList, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;

            var productSystemsCol = new ProductSystemsCollection();
            List<ProductSystems> oldList = productSystemsCol.GetProductSystemsListByRequestId(IdTechnicRequest);

            //если список пус - добавление всех элементов
            if (oldList.Count < 1)
                return AddProductSystems(newList, user);

            //формирование списка на удаление
            var delList = new List<ProductSystems>();
            foreach (ProductSystems oldItem in oldList)
                if (!newList.Contains(oldItem)) delList.Add(oldItem);

            //удаление 
            if (!DeleteProductSystems(delList)) return false;

            //формирование списка на добавление 
            var addList = new List<ProductSystems>();
            foreach (ProductSystems addItem in newList)
                if (!oldList.Contains(addItem)) addList.Add(addItem);

            //добавление новых элементов
            return AddProductSystems(addList, user);
        }

        /// <summary>
        /// добавляет в элементы списка кол-во, дату и записывает список в базу 
        /// </summary>
        /// <param name="list"></param>
        /// <param name="user"></param>
        public bool AddEquipments(List<TechnicRequestsEquipments> list, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;
            var bindingsCol = new TechnicRequestsEquipmentsCollection();
            foreach (TechnicRequestsEquipments item in list)
            {
                //item.IssueDate = customerEqupmentItem.IssueDate;
                //item.IssueDate = DateTime.Now;
                //item.EquipmentCount = customerEqupmentItem.EquipmentCount;
                item.IdTechnicRequestsEquipment = -1;
                item.IdTechnicRequest = IdTechnicRequest;
                bool result = bindingsCol.Add(item, user);
            }
            return true;
        }

        ///// <summary>
        ///// добавление списка оборудования к существующей заявке
        ///// </summary>
        ///// <param name="equipmentsList"></param>
        ///// <param name="user"></param>
        ///// <returns></returns>
        //public bool AddEquipments(List<Equipments> equipmentsList, string user)
        //{
        //    if (this.IdTechnicRequest < 1) return false;
        //    var bindingsList = new List<TechnicRequestsEquipments>();
        //    foreach (var equipment in equipmentsList)
        //    {
        //        var bindingItem = new TechnicRequestsEquipments
        //        {
        //            IdEquipment = equipment.IdEquipment,
        //            IdTechnicRequest = this.IdTechnicRequest

        //        };
        //        bindingsList.Add(bindingItem);
        //    }
        //    return AddEquipments(bindingsList, user);
        //}

        /// <summary>
        /// удаление списка привязок оборудования к заявке
        /// </summary>
        /// <param name="list">список привязок</param>
        /// <returns>результат</returns>
        public bool DeleteEquipments(List<TechnicRequestsEquipments> list)
        {
            if (list.Count < 1) return true;
            var bindingsCol = new TechnicRequestsEquipmentsCollection();
            foreach (TechnicRequestsEquipments item in list)
                bindingsCol.Delete(item);
            return true;
        }

        /// <summary>
        /// Обновление оборудования, привязанного к заявке
        /// </summary>
        /// <param name="newList"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool UpdateEquipments(List<TechnicRequestsEquipments> newList, string user)
        {
            if (string.IsNullOrEmpty(user)) return false;

            var equipmentsCol = new EquipmentsCollection();
            //формирование старого списка
            List<TechnicRequestsEquipments> oldList =
                equipmentsCol.GetBindingsEquipmentsListByRequestId(IdTechnicRequest);

            if (newList.Count < 1)
                return DeleteEquipments(oldList);

            //формирование списка на удаление
            var delList = new List<TechnicRequestsEquipments>();
            foreach (TechnicRequestsEquipments oldItem in oldList)
            {
                bool contains = false;
                foreach (TechnicRequestsEquipments newItem in newList)
                {
                    if (newItem.IdEquipment == oldItem.IdEquipment)
                        contains = true;
                }
                if (!contains)
                {
                    if (!delList.Contains(oldItem))
                        delList.Add(oldItem);
                }
            }

            //удаление элементов
            if (!DeleteEquipments(delList)) return false;
            //DB.TechnicRequestsEquipmentsDelete(request, delList);

            //формирование списка на добавление 
            //если элемент не содержится в старом списке
            var addList = new List<TechnicRequestsEquipments>();
            foreach (TechnicRequestsEquipments newItem in newList)
            {
                bool contains = false;
                foreach (TechnicRequestsEquipments oldItem in oldList)
                {
                    if (newItem.IdEquipment == oldItem.IdEquipment)
                        contains = true;
                }
                if (contains) continue;
                if (!addList.Contains(newItem)) addList.Add(newItem);
            }

            //добавление новых элементов
            return AddEquipments(addList, user);
        }

        /// <summary>
        /// Добавить существующий файл к списку вложений
        /// </summary>
        /// <param name="attachmentName">Отображаемое имя вложения</param>
        /// <param name="fileName">Реальное имя файла</param>
        /// <param name="user"></param>
        public bool AddAttachment(string attachmentName, string fileName, string user)
        {
            if (string.IsNullOrEmpty(attachmentName) || string.IsNullOrEmpty(fileName)) return false;
            var attachment = new TechnicRequestAttachments
                                 {
                                     Name = attachmentName,
                                     Path = fileName,
                                     IdTechnicRequest = IdTechnicRequest
                                 };
            var attachmentsCol = new TechnicRequestAttachmentsCollection();
            return attachmentsCol.Add(attachment, user);
        }

        /// <summary>
        /// Добавление листа аттачментов к заявке
        /// </summary>
        /// <param name="attachmentsList"></param>
        /// <param name="user"></param>
        public bool AddAttachments(List<TechnicRequestAttachments> attachmentsList, string user)
        {
            if (attachmentsList.Count < 1) return true;
            if (string.IsNullOrEmpty(user)) return false;
            var attachmentsCol = new TechnicRequestAttachmentsCollection();
            foreach (TechnicRequestAttachments item in attachmentsList)
            {
                if (item == null) continue;
                item.IdTechnicRequest = IdTechnicRequest;
                if (!attachmentsCol.Add(item, user)) return false;
            }
            return true;
        }

        /// <summary>
        /// Обновить существующий файл в списке вложений по названию вложения
        /// </summary>
        /// <param name="attachmentName">Отображаемое имя вложения</param>
        /// <param name="fullFileName">Реальное имя файла</param>
        /// <param name="user"></param>
        public bool UpdateAttachment(string attachmentName, string fullFileName, string user)
        {
            if (string.IsNullOrEmpty(attachmentName) || string.IsNullOrEmpty(fullFileName) || string.IsNullOrEmpty(user))
                return false;
            if (!File.Exists(fullFileName)) return false;
            var attachmentsCol = new TechnicRequestAttachmentsCollection();
            foreach (TechnicRequestAttachments item in TechnicRequestAttachments)
            {
                if (item.Name != attachmentName) continue;
                item.Path = fullFileName;

                //attachmentsCol.Update(item, user);
                //Была проблема с задвоением вложений 
                attachmentsCol.Delete(item);

                //var attachment = DB.GetTechnicRequestAttachmentById(item.IdTechnicRequestAttachment);
                //if (attachment != null)
                //{
                //    attachment.Name = attachmentName;
                //    attachment.Path = fileName;
                //    DB.Save();
                //    return;
                //}
            }
            return AddAttachment(attachmentName, fullFileName, user);
        }

        #endregion
    }
}